1
תגובות

תלויות של הMVC

פתח משהה ,
אני מנסה להתרגל לעקרונות תכנות. כמו דרך חיים כזאת. כל אחד צריך לעשות את מה שהוא עושה ולא להתערב לאחר . עדיף גם שמה שאני עושה לא יהיה תלוי בעבודה של מישהו אחר כי אז אני תלוי בו וזה מסכן אותי.
ככה אני גם רוצה לתכנת. כל מודל עושה דבר ייעודי ויחיד ולא תלוי באחר.
אבל בעצם בתבנית הMVC המחלקות של הMVC תלויות אחת בשנייה. גם המתודות של הקונטרולר (עזבו את זה שהן תלויות במחלקות של הפרוייקט , הן כמו קוד רגיל רק במתודה) תלויות במודלים ובוויו.
ובעצם גם ספריות של ACTIVE RECORD ושל DB בכלל, תלויות אחת בשנייה ומממשות אחת את השנייה בקודים.
יש דרך להפריד רשויות? או שזה חייב לבוא ביחד ?

1 תשובות

avatar ענה intval ב 10 לאפריל 2015 #

active record בהגדרה שלו גורם לתלויות מאוד גבוהות בין הקוד שמייצג עצמים לבין הקוד שעובד עם מסד נתונים.
אם אתה עובד עם active record - אין לך הרבה ברירה פה ואתה מתפשר על הפרדה לטובת פשטות.

אופציה אחרת היא לא לעבוד עם active record, אלה עם data mapper ו repository, מה שהופך את התוכנה להרבה יותר גמישה ופחות תלויה, אך גם דורשת יותר קוד בדרך כלל. למשל זו צורת העבודה הדיפולטית ב symfony עם doctrine

קשר בין view ל controller בעצם אין, היות שהקונטרולר צריך פשוט לייצר מודל ולהפעיל רינדור (הצבה של הערכים בתבנית)
מכאן נובע שהקונטרולר משתמש בהם, אך עושה משהו אחד ויחיד: מקבל בקשות ומפעיל קוד אחר. בתוכו אין קוד שמתעסק בקריאת קבצים, פיענוח תבניות וכו'
לכן אפשר לומר שכל אחד עושה משהו אחד.

ובאמת שמחלקות קצת "תלויות בקיומן" של מחלקות אחרות. אתה לא יכול ליצור מחלקה אחת בתוכנה שלא משתמשת בשום צורה במחלקות אחרות (אלא אם דחפת את כל התוכנה למחלקה אחת). מה שצריך לשים לב אליו, הוא לא שמחלקות לא ישתמשו אחת בשניה, אלא ל:

א. מחלקה אחת אחראית לדבר אחד. אם צריך יותר מזה, שתשתמש במחלקה אחרת
ב. מחלקות צריכות להימנע מתלויות במימושים ספציפיעם ולהסתמך על אינטרפייסים